package com.ruoyi.zyc;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Ergodic {
    public static void main(String[] args) {
        forEach();
        iterator();
        streamFor();
        forEachWithIndex();

    }

    /**
     * 使用for-each循环：
     * 对于数组或者实现了Iterable接口的集合（例如List，Set等），可以使用for-each循环遍历。这种方式简洁高效
     */
    public static void forEach() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("b");
// 添加元素到list
        for (String item : list) {
            System.out.println(item);
        }
    }

    /**
     * 对于任何集合，都可以使用迭代器进行遍历。使用迭代器的好处是你可以在遍历过程中进行删除操作，而不会影响其他元素的遍历。
     */
    public static void iterator() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("b");
// 添加元素到list
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next();
            if ("b".equals(item)) {
                iterator.remove();
            }
            System.out.println(item);
        }
        System.out.println(list);
    }

    /**
     * Java 8引入了Stream API，这使得遍历集合变得更简单，更强大。你可以在流上进行各种操作，例如filter，map，reduce等。这种方式在处理大量数据时非常高效。
     */
    public static void streamFor() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("b");
// 添加元素到list
        list.stream().forEach(System.out::println);
    }

    /**
     * 对于需要知道元素索引的情况，可以使用forEachWithIndex方法。这个方法会在每个元素上调用一个Consumer函数，并传递元素的索引作为参数。
     */
    public static void forEachWithIndex() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("b");
// 添加元素到list中
        for (int i = 0; i < list.size(); i++) {
            String item = list.get(i);
            // 在这里使用item和索引i进行操作
            System.out.println("Index: " + i + ", Item: " + item);
        }

    }
}
